package br.com.afi.encoding_converter;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

/**
 * Realiza a conversão de encoding de vários arquivos.
 * 
 * @author André de Fontana Ignacio
 * @version 1.0
 */
public class FilesEncodingConverter {
	private Collection<File> files;
	private File baseDir;
	private File outputDir;
	private String fromEncoding;
	private String toEncoding;
	
	/**
	 * Cria um conversor que converte o arquivo para o encoding informado. Os arquivos serão substituídos.
	 * 
	 * @param baseDir Diretório base
	 * @param files Arquivos à serem convertidos
	 * @param fromEncoding Encoding dos arquivos de origem
	 * @param toEncoding Encoding dos arquivos de destino
	 */
	public FilesEncodingConverter( File baseDir, Collection<File> files, String fromEncoding, String toEncoding )
	{
		super();
		this.baseDir = baseDir;
		this.files = files;
		this.fromEncoding = fromEncoding;
		this.toEncoding = toEncoding;
	}
	
	/**
	 * Cria um conversor que converte os arquivos para o encoding informado. O novos arquivos serão gravados no diretório informado.
	 * 
	 * @param baseDir Diretório base
	 * @param files Arquivo à serem convertido
	 * @param fromEncoding Encoding do arquivo de origem
	 * @param toEncoding Encoding do arquivo de destino
	 * @param outputDir Diretório onde os novos arquivos serão gravados
	 */
	public FilesEncodingConverter( File baseDir, Collection<File> files, String fromEncoding, String toEncoding, File outputDir )
	{
		this( baseDir, files, fromEncoding, toEncoding );
		this.outputDir = outputDir;
	}
	
	/**
	 * Realiza a conversão.
	 * 
	 * @return Arquivos convertidos
	 * @throws IOException Lançada quando não for possível gravar o arquivo.
	 */
	public Collection<File> convert() throws IOException
	{
		final Collection<File> cFiles = new ArrayList<File>();
		for( File file : files )
		{
			cFiles.add( new FileEncodingConverter( baseDir, file, fromEncoding, toEncoding, outputDir ).convert() );
		}
		return cFiles;
	}
}
